package Alexico;
import java.io.*;
/**
*<html><table width="100%" cellspacing="0" cellpadding="3" border="1">
 * <tr><th align="left" colspan="2" bgcolor="#CCCCFF" ><font size="+2"><b>Errores Léxicos</b></font></th></tr>
 * <tr class="TableRowColor" bgcolor="white"><td>1</td><td>Comienzo de lexema invalido</td></tr>
 * <tr><td>2</td><td>Número mal formado</td></tr>
 * <tr><td>3</td><td>Char mal formado</td></tr>
 * <tr><td>4</td><td>String mal formado</td></tr>
 * <tr><td>5</td><td>Expresion Condicional mal formada. se esperaba un '&'</td></tr>
 * <tr><td>6</td><td>Identificador mal formado</td></tr><tr>
 * <td>7</td><td>Comentario mal formado</td></tr>
 * <tr><td>8</td><td>Expresion Condicional mal formada. se esperaba un '|'</td></tr>
 * <tr><td>9</td><td>Característica del lenguaje no soportada: </td></tr>
 * <tr><td>10</td><td>Caracter Extraño</td></tr>
 * </table></html>
* @author Sayes Lucero, Alfredo Andrès Lu:66604
* @author Diego Ghilardi Lu: 51782
*/
public class errorLexico extends Exception{
    
    private static String msgSegunError(int nro)
    {
        String msg="";
        switch (nro){
            case 1:{
                msg="Cominezo de lexema inválido. Causa: ";
            break;
            }
            case 2:{
                msg="Número mal formado. Causa: ";
            break;
            }
            case 3:{
                msg="Char mal formado. ";
            break;
            }
            case 4:{
                msg="String mal formado. ";
            break;
            }
            case 5:{
                msg="Expresion Condicional mal formada. se esperaba un '&'";
            break;
            }
            case 6:{
                msg="Identificador mal formado. Causa: ";
            break;
            }
            case 7:{
                msg="Comentario mal formado";
            break;
            }
            case 8:{
                msg="Expresion Condicional mal formada. se esperaba un '|'";
            break;
            }
            case 9:{
                msg="Característica del lenguaje no soportada: ";
            break;
            }
            case 10:{
                msg="Caracter Extraño. Causa: ";
            break;
            }
        }
        return msg;
    }
    @Override
    public void printStackTrace(PrintStream ps) {
        System.out.println(getMessage());
    }
    /**
     * Constructor de excepciones personalizadas
     * @param nro Codigo de error 
     * @param linea Numero de linea donde ocurrio el error Lexico
     * @return {@link errorLexico}
     */
    public static String construirError(int nro, int linea) {
        String error="Nro Error: " + nro + "." +  msgSegunError(nro) + ". Nro de Linea: "+ linea;
        return (error);
    }
    
    /**
     * Constructor de excepciones personalizadas
     * @param nro Codigo de error 
     * @param linea Numero de linea donde ocurrio el error Lexico
     * @param observacion Debera corresponderse con el la constante que representa un palabra prohibida en el lenguaj JAVA-DECAF
     * @return {@link errorLexico}
     */
    public static String construirError(int nro, int linea, String observacion) {
        String error="Nro Error: " + nro + "." +  msgSegunError(nro) + observacion + ". Nro de Linea: "+ linea;
        return (error);
    }

/**
*Crea una nueva instancia de ErrorLexico
*@param tipo
*/
    public errorLexico(String tipo) {
         super("ERROR LEXICO =====>  "  + tipo);
    }
}
